【小ネタ】tmpfsを調べる
こんにちわ、札幌のヨシエです。
EC2インスタンスで検証を行っている時にバイナリなどを/tmp
に配置しておりまして、節約のために電源OFFすることでバイナリ等が消えました。
自分でも何やってるんだと反省しまして、本記事を書きました。
何が発生した? /tmpについて
本記事を読まれてる方にはもうすでにご存知の方もいらっしゃると思いますし、Linuxを触り始めた方もいらっしゃると思うので前提をフラットにしたく概要を書かせてもらいます。
/tmp
はキャッシュなどの一時的に保存されるファイル配置場所として利用されるディレクトリとなります。
このディレクトリ自体はtmpfsというファイルシステムがマウントされており、これはサーバー(EC2インスタンス)の電源オフにすることで保存内容が削除されると記憶してました。
tmpfsはインメモリファイルシステムとしてメモリ上に作成されるファイルシステムを指します。
イメージとしては、EBSのように扱うことが出来てアクセスが早いといった特色はありつつも、
メモリ上の領域であることから電源をオフにすると保存されているデータが削除されます。
起こったことと自分に対して「私よ、忘れるんじゃないぞ」という戒めからAmazonLinuxとUbuntuでどうなっているか確認してみました。
確認対象OSディストリビューション
対象OS | 利用AMI_ID |
---|---|
AmazonLinux2023 | ami-013a28d7c2ea10269 |
AmazonLinux2 | ami-0eda63ec8af4f056e |
Ubuntu24.04 | ami-0a0b7b240264a48d7 |
Ubuntu22.04 | ami-0162fe8bfebb6ea16 |
確認方法
挙動を確認する方法として以下の作業を行いました。
- テストファイル作成
- インスタンス電源OFF
- インスタンス電源ON
- テストファイルの有無を確認
tmpfsのマウント状態確認
まずtmpfsがマウントされているかをdfコマンド結果で確認しました。
AmazonLinux2023
##########################################################
#df#
##########################################################
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 4096 0 4096 0% /dev
tmpfs 486156 0 486156 0% /dev/shm
tmpfs 194464 424 194040 1% /run
/dev/xvda1 8310764 1629068 6681696 20% /
tmpfs 486160 0 486160 0% /tmp
/dev/xvda128 10202 1310 8892 13% /boot/efi
AmazonLinux2
##########################################################
#df#
##########################################################
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 478740 0 478740 0% /dev
tmpfs 487764 0 487764 0% /dev/shm
tmpfs 487764 348 487416 1% /run
tmpfs 487764 0 487764 0% /sys/fs/cgroup
/dev/xvda1 8376300 1863424 6512876 23% /
Ubuntu22.04
##########################################################
#df#
##########################################################
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 7941576 1775956 6149236 23% /
tmpfs 486012 0 486012 0% /dev/shm
tmpfs 194408 828 193580 1% /run
tmpfs 5120 0 5120 0% /run/lock
/dev/xvda15 106832 6186 100646 6% /boot/efi
Ubuntu24.04
##########################################################
#df#
##########################################################
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 7034376 1723316 5294676 25% /
tmpfs 490212 0 490212 0% /dev/shm
tmpfs 196088 840 195248 1% /run
tmpfs 5120 0 5120 0% /run/lock
/dev/xvda16 901520 76972 761420 10% /boot
/dev/xvda15 106832 6246 100586 6% /boot/efi
この時点でtmpfsがマウントされているディストリビューションはAmazonLinux2023ということが見えました。
対象OS | /tmpfsマウント状況 |
---|---|
AmazonLinux2023 | あり |
AmazonLinux2 | なし |
Ubuntu24.04 | なし |
Ubuntu22.04 | なし |
電源断の検証を実施
各ディストリビューションが動作しているインスタンスに対して、RunCommandよりテストファイルを作成した後に電源をオフにしてから起動し直しました。
以下は結果になります。
確認結果
対象OS | tmpfsマウント状況 | テストファイルの有無 |
---|---|---|
AmazonLinux2023 | あり | 消えた |
AmazonLinux2 | なし | 消えない |
Ubuntu24.04 | なし | 消えた |
Ubuntu22.04 | なし | 消えた |
AmazonLinux2023とAmazonLinux2についてはdfコマンド結果から読み取れるように
/tmpにtmpfsをマウントしているAmazonLinux2023はテストファイルが削除されました。
/tmpにtmpfsをマウントされていないAmazonLinux2はテストファイルは残ったままでした。
ここまでは想定通りの結果だったため、「ホント何やってんだろうね、私は。」という気持ち、「ですよね、そうですよね」という気持ちになったことは言うまでもありません。
ただし、Ubuntu22.04と24.04の結果は少し見方が変わることがわかりました。
22.04と24.04では/tmp
にtmpfsがマウントされていないように見えますが、ファイルが削除されておりました。
想定される部分を確認してみた結果としてsystemdの設定による挙動かと思われます。
systemdが管理しているサービスにてsysmted-tmpfiles-setup.service
というものがあり、これはシステム起動時、指定された設定ファイルに基づいて一時ファイルを管理するための初期設定を行います。
この設定ファイルというのは/etc/tmpfiles.d/
配下に存在する設定ファイルを指します。
せっかくなので今回検証で利用した各インスタンスの設定状況を見てみようと思います。
Amazon Linux2023
# systemd-tmpfiles --cat-config | grep /tmp | grep -v '#'
q /tmp 1777 root root 10d
Amazon Linux2
# systemd-tmpfiles --cat-config | grep /tmp | grep -v '#'
systemd-tmpfiles: unrecognized option '--cat-config'
Ubuntu24.04
# systemd-tmpfiles --cat-config | grep /tmp | grep -v '#'
D /tmp 1777 root root 30d
Ubuntu22.04
# systemd-tmpfiles --cat-config | grep /tmp | grep -v '#'
D /tmp 1777 root root -
AmazonLinux2023,AmazonLinux2では設定ファイルが存在したり、ファイルそのものが見つからなかったりという状況でした、こちらはテストファイル削除の挙動として結果が見えていたため、Ubuntuに移ります。
Ubuntu24.04の設定ファイル(/usr/lib/tmpfiles.d/tmp.conf
)に以下のように記載されてます。
D /tmp 1777 root root 30d
上記の設定値は/tmp
に対して、データを残さないクリーンアップ処理が指定されており、かつ30日を超えて残っているファイルを削除する処理を指定されております。
この設定が今回の疑問部分と思い、試しにと設定項目をコメントアウトした後に電源OFFにしたところファイル削除が行われませんでした。(Ubuntu22.04に対しても結果は同様でした)
# diff /usr/lib/tmpfiles.d/tmp.conf /usr/lib/tmpfiles.d/tmp.conf_bk
11c11
< #D /tmp 1777 root root 30d
---
> D /tmp 1777 root root 30d
最後に
サーバーの中身はキレイが一番という意識から/tmpへデータを配置したことが記事作成のきっかけになりました。